<?php
$pattern = "^[a-zA-Z0-9_. -]+$"; //Est reproduite dans is_alpha_num. Donc y modifier aussi si modif ici.
include($_SERVER["DOCUMENT_ROOT"]."/menu.php");
include($_SERVER["DOCUMENT_ROOT"]."/fonctions_mysqli.php");

//Ne renvoie la valeur donnée que si elle est numérique, sinon renvoie 0.
function get_num($num) {
	if(is_numeric($num))
		return $num;
	else
		return 0;
}
//Sécurise une chaîne, en enlevant d'évenutels tags.
function get_data_ss_tag($data) {
	return trim(strip_tags($data));
}
//Sécurise une chaîne, en ne la retournant que si elle n'est qu'alphanumerique
function get_alphanum($data) {
	if(preg_match("#^[a-zA-Z0-9_]+$#" , $data))
		return $data;
	else
		return "";
}
//Vérifie qu'une chaîne est uniquement alphanumérique, ou comportant des underscores, espace, point ou tirets.
function is_alpha_num($str) {
	if(preg_match("#^[a-zA-Z0-9_. -]+$#" , $str)) return true;
	else return false;
}
//Sécurise une chaîne, en ne la retournant que si elle n'est qu'alphanumerique ou contenant des points
function get_alphanumpoint($data) {
	if(preg_match("#^[a-zA-Z0-9_.]+$#" , $data))
		return $data;
	else
		return "";
}

function get_post_get_num($var) {
	$retour = get_num(@$_GET[$var]);
	if($retour == 0)
		$retour = get_num(@$_POST[$var]);
	return $retour;
}

function get_post_get($var) {
	$retour = get_data_ss_tag(@$_GET[$var]);
	if($retour == "")
		$retour = get_data_ss_tag(@$_POST[$var]);
	return $retour;
}
/** Vérifie que l'ip actuelle est bien l'ip avec laquelle le type s'est connectée. Sinon, c'est potentiellement un détournement de session.
Dans le doute, on le déco. */
function test_session_piratee($mysqli) {
	/* Finalement on utilise pas ça pour l'instant. En effet, si ça arrive (à cause d'un pirate ailleurs, ou juste une reco sur un autre wifi)
	alors que le swf de jeu est ouvert, ça peut faire foirer plein de truc du PHWservice. TODO : à repenser si nécessaire.
	if(!empty($_SESSION['login']) && $_SESSION['ip'] != $_SERVER['REMOTE_ADDR'] &&)
		reset_session($mysqli);*/
}

function reset_session($mysqli) {
	unset($_SESSION['new_topics']);
	unset($_SESSION['grad']);
	unset($_SESSION['login']);
	unset($_SESSION['id']);
	unset($_SESSION['ip']);
	unset($_SESSION['pop']);
	setcookie("auto","",time() - 3600,'/', "", false, true);
	setcookie("login2","",time() - 3600,'/', "", false, true);
	setcookie("motpasse","",time() - 3600,'/', "", false, true);
	mysqli_query_with_error($mysqli, "DELETE FROM sessions WHERE session_id='".session_id()."'");
}
function connect_guy($mysqli, $infos_session) {
	session_regenerate_id(TRUE);
	$_SESSION['login']=$infos_session['username'];
	$_SESSION['id']=$infos_session['user_id'];
	$_SESSION['ip']=$_SERVER['REMOTE_ADDR'];
	$_SESSION['lastvisit']= $infos_session['user_lastvisit'];
	$_SESSION['lang']= $infos_session['user_lang'];
	$_SESSION['grad']=NULL;
}

//Formate un strotime en chaine jolie. Le second paramètre indique si on veut voir les minutes, et le troisième si on veut voir l'année. 
//Le quatrième précise si les mois doivent s'écrire en abrégé ou en toute lettre.
function datouille($dat, $bool_minute, $bool_annee = true, $mois_entier = false) {
	$dat = get_num($dat);
	$jour=date("d", $dat);
	$mwa=date("m", $dat);
	$date = "Aujourd'hui";
	$date_actu = strtotime("now");
	if($jour != date("d", $date_actu) || $mwa != date("m", $date_actu) || date("Y", $dat) != date("Y", $date_actu)) {
		$mois="kebab";
		switch($mwa) {
		  case '01': if($mois_entier) $mois="Janvier"; else $mois="Jan"; break;
		  case '02': if($mois_entier) $mois="Février"; else $mois="Fev"; break;
		  case '03': $mois="Mars"; break;
		  case '04': $mois="Avril"; break;
		  case '05': $mois="Mai"; break;
		  case '06': $mois="Juin"; break;
		  case '07': if($mois_entier) $mois="Juillet"; else $mois="Juil"; break;
		  case '08': $mois="Août"; break;
		  case '09': if($mois_entier) $mois="Septembre"; else $mois="Sept"; break;
		  case '10': if($mois_entier) $mois="Octobre"; else $mois="Oct"; break;
		  case '11': if($mois_entier) $mois="Novembre"; else $mois="Nov"; break;
		  case '12': if($mois_entier) $mois="Décembre"; else $mois="Déc"; break;
		}
		$annee = "";
		if($bool_annee)
			$annee = " ".date("Y", $dat);
		$date = "le ".$jour." ".$mois.$annee;
	}
	 
	if($bool_minute) {
		$heure=date("H", $dat);
		$minute=date("i", $dat);
		$date = $date." à ".$heure."h".$minute;
	}
	return $date;
}
//Formate un strotime en chaine de type JJ/MM/AA. bool_minute indique si on veut voir les minutes.
function datouille_slash($dat, $bool_minute = false) {
	$dat = get_num($dat);
	$jour=date("d", $dat);
	$mois=date("m", $dat);
	$annee = date("y", $dat);
	$retour = $jour."/".$mois."/".$annee;
	if($bool_minute) {
		$heure=date("H", $dat);
		$minute=date("i", $dat);
		$retour = $retour." à ".$heure."h ".$minute;
	}
	return $retour;
}

function get_page($page_max) {
	$page = get_post_get("page");
	if($page == 0)
		$page = 1;
	if($page=='d')
		$page = $page_max;
	return get_num($page);
}

//Affiche le formulaire de changement de page et retourne un objet $data_pages qui servira à choisir les données à afficher 
//(en fonction de la page courante) et les liens de changement de page en bas.
function pagination($nbparpage, $nbresult, $adresse) {
	if($nbresult == 0) $nbresult = 1;
	$data_pages = array();
	$data_pages['adresse'] = $adresse;
	$data_pages['nbpages'] = ceil($nbresult/$nbparpage);
	$data_pages['page'] = get_page($data_pages['nbpages']);
	if($data_pages['page'] > $data_pages['nbpages'])return NULL;
	$data_pages['nbmin'] = ($data_pages['page'] - 1) * $nbparpage;
	$data_pages['nbmax'] = $data_pages['nbmin'] + $nbparpage;
	if($data_pages['nbpages'] > 1){
		 echo "<div style='float: right;'><form action='$adresse' 
		 method='POST'>Aller à la page <select name='page'>";
		 for($i=1; $i<=$data_pages['nbpages']; $i++){
			$sel = "";
			if($i == $data_pages['page']) $sel = "selected";
			echo "<option value='$i' $sel>$i";
		}
		 echo "</select><input type='submit' value='Go'></form></div>";
	}
	return $data_pages;
}
//récupère un object créé par pagination() et affiche les liens de changement de page du bas de la page.
function pagination_bas($data_pages, $nb_current) {
	echo "<p align='center'>";
	if($data_pages['page'] != 1){
		 echo "<a href='{$data_pages['adresse']}' class='pages'>&lt;&lt;&lt; Première page </a>";
		 $page2 = $data_pages['page']-1;
		 echo "<a href='{$data_pages['adresse']}&page=$page2' class='pages'>&lt; Page précédante </a>";
		 $doug = 1;
	} if($nb_current > $data_pages['nbmax']){
		 $page2 = $data_pages['page']+1;
		 if(@$doug == 1)
		  echo" - ";
		 echo "<a href='{$data_pages['adresse']}&page=$page2' class='pages'>Page suivante &gt;</a>";
		 echo "<a href='{$data_pages['adresse']}&page={$data_pages['nbpages']}' class='pages'>Dernière page &gt;&gt;&gt;</a>";
	}
	echo "</p>";
}

function get_avatar($nom_fichier, $id_color) {
	return "<img src='../jeu/avatars/$nom_fichier' style='background:".get_color($id_color)."; margin-left:2px; width:140px;'>";
}
function get_color($id_color) { //return noir si problème.
	if (file_exists($_SERVER["DOCUMENT_ROOT"].'/jeu/bibli/db/couleurs.xml')) {
			$xml = simplexml_load_file($_SERVER["DOCUMENT_ROOT"].'/jeu/bibli/db/couleurs.xml');
			foreach ($xml->color as $color) 
				if($color['id'] == $id_color)	return "#".substr($color['hexa'], 2);
	} return "#000000";
}

?>
